Canvas 绘图学习
转载自 MDN - Canvas教程(少部分改动)
什么是 canvas?
HTML5 <canvas> 元素是一个承载绘图的容器,通过 JavaScript 来完成。
<canvas id="tutorial" width="150" height="150"></canvas>
<canvas> 标签只有两个属性 width 和 height
注意,当没有设置宽度和高度的时候,canvas 会初始化宽度为 300 像素和高度为 150 像素。该元素可以使用 CSS 来定义大小,但在绘制时图像会伸缩以适应它的框架尺寸:如果 CSS 的尺寸与初始画布的 比例不一致,它会出现扭曲
替换内容
由于某些较老的浏览器(尤其是 IE9 之前的 IE 浏览器)或者文本浏览器不支持 HTML 元素 "canvas",在这些浏览器上应该总是能展示替代内容。
可以在 <canvas> 标签中 提供了替换内容。不支持 <canvas> 的浏览器将会忽略容器并渲染 <canvas> 里面的内容。而支持 <canvas> 的浏览器将会忽略在容器中包含的内容,正常渲染 canvas。
举个例子,我们可以提供对 canvas 内容的文字描述或者是提供动态生成内容相对应的静态图片,如下所示:
<canvas id="stockGraph" width="150" height="150">
当前浏览器不支持 canvas!请升级浏览器
</canvas>
<canvas id="clock" width="150" height="150">
<img src="images/clock.png" width="150" height="150" alt=""/>
</canvas>
检测是否支持
替换内容是用于在不支持 <canvas> 标签的浏览器中展示的。通过简单的测试 getContext() 方法的存在,脚本可以检查编程支持性
var canvas = document.getElementById('tutorial');
if (canvas.getContext){
var ctx = canvas.getContext('2d');
// drawing code here
} else {
// canvas-unsupported code here
}
渲染上下文
<canvas> 元素创造了一个固定大小的画布,它公开了一个或多个渲染上下文(3D 和 2D),其可以用来绘制和处理要展示的内容。这里主要说 2D渲染上下文(3D 的上下文使用的是就是 WebGL 了)
首先脚本需要找到渲染上下文,然后在它的上面绘制。<canvas> 元素有一个叫做 getContext() 的方法,这个方法是用来获得渲染上下文和它的绘画功能。
// 首先获取节点
var canvas = document.getElementById('tutorial');
// getContext() 只有一个参数,上下文的格式(2d or 3d)
var ctx = canvas.getContext('2d');
模板骨架
为了简洁, 在 HTML 中内嵌了 script 元素, 但并不推荐这种做法。
<html>
<head>
<title>Canvas tutorial</title>
<script type="text/javascript">
function draw(){
var canvas = document.getElementById('tutorial');
if (canvas.getContext){
var ctx = canvas.getContext("2d");
ctx.fillStyle = "rgb(200,0,0)";
ctx.fillRect (10, 10, 55, 50);
ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
ctx.fillRect (30, 30, 55, 50);
}
}
</script>
<style type="text/css">
canvas { border: 1px solid black; }
</style>
</head>
<body onload="draw();">
<canvas id="tutorial" width="150" height="150"></canvas>
</body>
</html>
上面的脚本中包含一个叫做 draw() 的函数,当页面加载结束的时候就会执行这个函数,它绘制了两个长方形,其中的一个有着alpha透明度。

或者使用监听事件,监听 load 事件
window.addEventListener('load', init, false)
绘制图形
栅格的概念
画布栅格(canvas grid)以及坐标空间。
上一节中的 HTML 模板中有个宽 150px, 高 150px的 canvas 元素。如下图所示,canvas 元素默认被网格所覆盖。通常来说网格中的一个单元相当于 canvas 元素中的一像素。
栅格的起点为左上角,坐标为(0,0)。所有元素的位置都相对于原点定位。所以图中蓝色方形左上角的坐标为距离左边(X轴)x像素,距离上边(Y轴)y像素(坐标为(x,y))。
